﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Utiles.Persistencia;
using EntidadesDeNegocio;

namespace PersistenciaSql
{
    public abstract class Broker
    {
        /// <summary>
        /// Retorna el broker indicado para el objeto
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static Broker CrearBroker(ObjetoPersistente obj) 
        {
            if (obj is Stock || obj is Componente)
                return new BrokerComponentes();
            else if (obj is Diseno)
                return new BrokerDiseno();
            else if (obj is HistoricoProduccion)
                return new BrokerHistoricoProduccion();
            else
                return new BrokerProduccion();
        }
        /// <summary>
        /// Inserta un registro en la tabla correspondiente al objeto
        /// </summary>
        /// <param name="obj"></param>
        public abstract void Insertar(ObjetoPersistente obj);
        /// <summary>
        /// Modifica un registro en la tabla correspondiente al objeto
        /// </summary>
        /// <param name="obj"></param>
        public abstract void Actualizar(ObjetoPersistente obj);
        /// <summary>
        /// Elimina el resgistro en la tabla correspondiente al objeto
        /// </summary>
        /// <param name="obj"></param>
        public abstract void Borrar(ObjetoPersistente obj);
        /// <summary>
        /// Selecciona todos los registros de la tabla correspondiente al objeto 
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public abstract List<ObjetoPersistente> SeleccionaTodo();
        /// <summary>
        /// Selecciona un registro de la tabla correspondiente al objeto
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public abstract ObjetoPersistente SeleccionaUno(ObjetoPersistente obj);
        /// <summary>
        /// Obtiene el ultimo oid de la tabla del objeto correspondiente
        /// </summary>
        /// <param name="obj"></param>
        /// <returns></returns>
        public abstract int ObtenerUltimoOid();
    }
}
